package dominio;

import static org.junit.Assert.*;

import java.util.Date;

import org.junit.Before;
import org.junit.Test;

import dominio.Agenda;
import dominio.Documento;
import dominio.Endereco;
import dominio.Naturalidade;
import dominio.Pessoa;
import dominio.Telefone;
import exceptions.PessoaNotExistentException;

public class AgendaTest {
	Agenda a;

	@Before
	public void setUp() throws Exception {
		a = new Agenda();
	}

	@Test
	public void testAddPessoa() {
		Pessoa p = new Pessoa(1, "", new Documento(), "", "", "", "", 
				new Date(), "", "", "", new Naturalidade(), new Endereco(), new Telefone(), true);
		a.addPessoa(p);
		assertTrue(a.getPessoas().contains(p));
	}

	@Test
	public void testRemoveExistentPessoa() throws PessoaNotExistentException {
		Pessoa p = new Pessoa(1, "", new Documento(), "", "", "", "", 
				new Date(), "", "", "", new Naturalidade(), new Endereco(), new Telefone(), true);
		Pessoa p2 = new Pessoa(1, "", new Documento(), "", "", "", "", 
				new Date(), "", "", "", new Naturalidade(), new Endereco(), new Telefone(), true);
		a.addPessoa(p);
		assertTrue(a.getPessoas().contains(p));
		a.removePessoa(p2);
		assertFalse(a.getPessoas().contains(p));
	}
	
	@Test(expected=PessoaNotExistentException.class)
	public void testRemoveNotExistentPessoa() throws PessoaNotExistentException {
		Pessoa p = new Pessoa();
		a.removePessoa(p);
	}
	
	@Test
	public void testUpdatePessoa() throws PessoaNotExistentException {
		Pessoa p1 = new Pessoa(1, "nome1", new Documento(), "", "", "", "", new Date(),
				"", "", "", new Naturalidade(), new Endereco(), new Telefone(), true);
		Pessoa p2 = new Pessoa(1, "nome2", new Documento(), "", "", "", "", new Date(),
				"", "", "", new Naturalidade(), new Endereco(), new Telefone(), true);
		a.addPessoa(p1);
		a.updatePessoa(p2);
		assertTrue(a.getPessoas().size() == 1);
		assertTrue(a.getPessoas().contains(p2));
		assertFalse(a.getPessoas().contains(p1));
	}
	
	@Test(expected=PessoaNotExistentException.class)
	public void testUpdateNotExistentPessoa() throws PessoaNotExistentException {
		Pessoa p1 = new Pessoa(1, "nome1", new Documento(), "", "", "", "", new Date(),
				"", "", "", new Naturalidade(), new Endereco(), new Telefone(), true);
		Pessoa p2 = new Pessoa(2, "nome2", new Documento(), "", "", "", "", new Date(),
				"", "", "", new Naturalidade(), new Endereco(), new Telefone(), true);
		a.addPessoa(p1);
		a.updatePessoa(p2);
	}

}
